Spring JDBC এবং Auditing

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC)
83
83

Spring JDBC-এ Auditing হল একটি প্রক্রিয়া যার মাধ্যমে আপনি একটি এপ্লিকেশনের ডেটাবেস অপারেশনগুলিতে (যেমন ইনসার্ট, আপডেট, ডিলিট) অতিরিক্ত তথ্য (যেমন, কে এবং কখন ডেটা পরিবর্তন করেছে) সংরক্ষণ করতে পারেন। এই ধরনের তথ্য সাধারণত ডেটাবেসের মধ্যে created_by, created_date, modified_by, এবং modified_date ফিল্ডের মাধ্যমে সংরক্ষিত হয়।

Spring JDBC-তে Auditing এর ব্যবহার সাধারণত কিছু অতিরিক্ত কলাম যোগ করে, যেগুলোর মান অটোমেটিক্যালি সেট করা হয় যখন ডেটাবেসে কোনো রেকর্ড ইনসার্ট বা আপডেট করা হয়। Spring Framework-এ Auditing সাধারণত Spring Data JPA-তে ব্যবহৃত হলেও, Spring JDBC-এ নিজস্ব পদ্ধতি অনুসরণ করে এই কাজ করা সম্ভব।

নিচে Spring JDBC-এ Auditing এর কিভাবে কাজ করা যায় তার উদাহরণ দেওয়া হল:

Step 1: application.properties ফাইলে ডেটাবেস কনফিগারেশন

প্রথমে, application.properties ফাইলে ডেটাবেস কনফিগারেশন করতে হবে:

# DataSource Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=root
spring.datasource.password=root_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Step 2: ডেটাবেসে অডিটিং ফিল্ড যুক্ত করুন

আপনি যদি created_by, created_date, modified_by, এবং modified_date ফিল্ডগুলি ডেটাবেসে সংরক্ষণ করতে চান, তবে প্রথমে ডেটাবেস টেবিলের মধ্যে এই ফিল্ডগুলো যুক্ত করতে হবে। উদাহরণ:

CREATE TABLE employee (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    salary DOUBLE,
    created_by VARCHAR(255),
    created_date TIMESTAMP,
    modified_by VARCHAR(255),
    modified_date TIMESTAMP
);

Step 3: Spring JDBC-এ Auditing হ্যান্ডলিং

Spring JDBC-তে Auditing করার জন্য আমাদের যে তথ্য দরকার (যেমন, বর্তমানে লগইন করা ইউজার বা তারিখ/সময়) তা কিভাবে সেট করা যাবে তা দেখানো হচ্ছে। সাধারণত আপনি JdbcTemplate এর মাধ্যমে এই ফিল্ডগুলো অটোমেটিক্যালি সেট করার জন্য beforeInsert বা beforeUpdate মেথড ব্যবহার করতে পারেন।

ক্লাসের মধ্যে Auditing তথ্য সেট করা:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.sql.Timestamp;
import java.util.Date;

@Repository
public class EmployeeRepository {

    private JdbcTemplate jdbcTemplate;

    // Constructor injection for JdbcTemplate
    public EmployeeRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // Method to insert a new employee with auditing info
    public void insertEmployeeWithAuditing(Employee employee, String createdBy) {
        String sql = "INSERT INTO employee (id, name, salary, created_by, created_date) VALUES (?, ?, ?, ?, ?)";

        jdbcTemplate.update(sql, employee.getId(), employee.getName(), employee.getSalary(), 
                createdBy, new Timestamp(System.currentTimeMillis()));
    }

    // Method to update an existing employee with auditing info
    public void updateEmployeeWithAuditing(Employee employee, String modifiedBy) {
        String sql = "UPDATE employee SET name = ?, salary = ?, modified_by = ?, modified_date = ? WHERE id = ?";

        jdbcTemplate.update(sql, employee.getName(), employee.getSalary(), 
                modifiedBy, new Timestamp(System.currentTimeMillis()), employee.getId());
    }
}

Employee ক্লাস:

এখানে একটি Employee ক্লাস তৈরি করা হয়েছে, যা ডেটাবেসের employee টেবিলের রেকর্ডগুলিকে রিপ্রেজেন্ট করবে:

public class Employee {
    private int id;
    private String name;
    private double salary;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

Step 4: Service Layer এ Auditing কল করুন

এখন, EmployeeService ক্লাসে insertEmployeeWithAuditing এবং updateEmployeeWithAuditing মেথডগুলি কল করবেন:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    private final EmployeeRepository employeeRepository;

    @Autowired
    public EmployeeService(EmployeeRepository employeeRepository) {
        this.employeeRepository = employeeRepository;
    }

    public void addEmployee(Employee employee, String createdBy) {
        employeeRepository.insertEmployeeWithAuditing(employee, createdBy);
    }

    public void updateEmployee(Employee employee, String modifiedBy) {
        employeeRepository.updateEmployeeWithAuditing(employee, modifiedBy);
    }
}

Step 5: Controller তৈরি করুন (Optional)

আপনি যদি এই কার্যকলাপ ওয়েব রেসপন্সের মাধ্যমে করতে চান, তবে Spring MVC Controller তৈরি করতে পারেন:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class EmployeeController {

    private final EmployeeService employeeService;

    @Autowired
    public EmployeeController(EmployeeService employeeService) {
        this.employeeService = employeeService;
    }

    @PostMapping("/employee")
    public String addEmployee(@RequestBody Employee employee) {
        // For example, setting createdBy as "admin"
        employeeService.addEmployee(employee, "admin");
        return "Employee added successfully with auditing!";
    }

    @PutMapping("/employee/{id}")
    public String updateEmployee(@PathVariable int id, @RequestBody Employee employee) {
        // For example, setting modifiedBy as "admin"
        employee.setId(id);
        employeeService.updateEmployee(employee, "admin");
        return "Employee updated successfully with auditing!";
    }
}

Step 6: Spring Boot Application রান করুন

এখন আপনি Spring Boot অ্যাপ্লিকেশনটি রান করতে পারেন এবং POST /employee বা PUT /employee/{id} রিকোয়েস্ট পাঠিয়ে কর্মী তৈরি বা আপডেট করতে পারবেন। এতে করে created_by, created_date, modified_by, এবং modified_date ফিল্ডগুলো অটোমেটিক্যালি সেট হবে।


Spring JDBC-তে Auditing এর সুবিধা:

  1. ট্র্যাকিং এবং লজ: আপনি জানবেন কে এবং কখন ডেটা পরিবর্তন করেছে, যা ডেটা ট্র্যাকিং এবং অডিটিং এর জন্য গুরুত্বপূর্ণ।
  2. অটোমেটেড ডেটা ফিল্ডস: created_by, created_date, modified_by, modified_date ফিল্ডগুলোর মান অটোমেটিক্যালি সেট করা যায়, যা রক্ষণাবেক্ষণ সহজ করে তোলে।
  3. সুরক্ষা এবং রেগুলেটরি কমপ্লায়েন্স: বেশ কিছু ক্ষেত্রেই এই ধরনের তথ্য সংরক্ষণ প্রয়োজন হয় যেমন, আইটি নিরাপত্তা, জবাবদিহি বা আইনগত নিয়ম অনুযায়ী।

সীমাবদ্ধতা:

  1. ডেটা সংরক্ষণ: যদি আপনি অ্যাপ্লিকেশন লেভেলে অডিটিং তথ্য সংরক্ষণ করেন, তবে এটি ডেটাবেসে অতিরিক্ত তথ্য যোগ করতে পারে।
  2. পারফর্মেন্স: যদি প্রতিটি অপারেশনে অতিরিক্ত কলাম সঠিকভাবে আপডেট না করা হয়, তবে এটি পারফর্মেন্সে কিছুটা প্রভাব ফেলতে পারে।

Spring JDBC-তে Auditing ব্যবহারের মাধ্যমে আপনি ডেটাবেস অপারেশনগুলো ট্র্যাক করতে পারবেন এবং ডেটাবেসের যেকোনো পরিবর্তন সম্পর্কে গুরুত্বপূর্ণ তথ্য সংগ্রহ করতে সক্ষম হবেন।

Content added By

Auditing কি এবং কেন এটি গুরুত্বপূর্ণ?

105
105

স্প্রিং জেডিবিসি (Spring JDBC)-তে Auditing হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসে করা পরিবর্তনগুলো ট্র্যাক করা হয়। সাধারণত এটি ব্যবহৃত হয় এমন ডেটা রেকর্ডের সৃষ্টির সময়, সংশোধন এবং মুছে ফেলার সময়—এই সমস্ত ক্রিয়াকলাপের একটি ইতিহাস রাখার জন্য। Auditing ডেটাবেসের জন্য গুরুত্বপূর্ণ কারণ এটি ডেটার পরিবর্তন এবং ব্যবহারের উপর নজর রাখতে সাহায্য করে, যা নিরাপত্তা, অভ্যন্তরীণ অডিট এবং নিয়ম-নীতি মেনে চলার জন্য অপরিহার্য।

Auditing এর গুরুত্ব:

  1. নিরাপত্তা ও ট্র্যাকিং: Auditing ডেটাবেসে সমস্ত পরিবর্তন (যেমন, ইনসার্ট, আপডেট, ডিলিট) ট্র্যাক করতে সাহায্য করে। এটি বিশেষভাবে নিরাপত্তা নিশ্চিত করতে গুরুত্বপূর্ণ। যদি কোনো অনুপ্রবেশ বা ডেটাবেসে অস্বাভাবিক কার্যকলাপ ঘটে, তবে auditing সিস্টেম সেই সময়ের পরিবর্তন এবং সংশ্লিষ্ট ব্যবহারকারীর তথ্য সরবরাহ করতে পারে।
  2. প্রতিবেদন এবং অডিটিং: ব্যবসার আভ্যন্তরীণ নিয়ম মেনে চলা বা আইনগত দাবির জন্য auditing একটি অপরিহার্য অংশ। এটি ডেটাবেসের সমস্ত পরিবর্তন এবং তাদের সাথে সম্পর্কিত তথ্য যেমন পরিবর্তনকারী ব্যবহারকারী, পরিবর্তনের তারিখ এবং সময় সংরক্ষণ করে।
  3. ডেটার ইন্টিগ্রিটি রক্ষা: Auditing নিশ্চিত করে যে ডেটাবেসে কোনো অবৈধ বা অনিচ্ছাকৃত পরিবর্তন হয়নি এবং প্রয়োজনীয় রোলব্যাক বা সংশোধন ব্যবস্থা গ্রহণ করা যাবে।
  4. নির্ধারিত সময়ে ডেটা পুনরুদ্ধার: যখন কোনো ডেটার ভুল বা ক্ষতি হয়, auditing ইতিহাস ব্যবহার করে পূর্বের সঠিক অবস্থা পুনরুদ্ধার করা যায়। এটি বিশেষ করে ডেটাবেসের ব্যাকআপ এবং পুনরুদ্ধারের জন্য গুরুত্বপূর্ণ।
  5. বিজনেস প্রোসেস ট্র্যাকিং: Auditing বিজনেসের বিভিন্ন প্রক্রিয়ার ট্র্যাক রাখতে সহায়তা করে। এটি নিশ্চিত করে যে প্রতিটি পদক্ষেপ বা ডেটাবেস পরিবর্তন সময়মতো এবং সঠিকভাবে সম্পন্ন হয়েছে।

স্প্রিং জেডিবিসি (Spring JDBC) এবং Auditing:

স্প্রিং জেডিবিসি-তে auditing কার্যকর করতে, সাধারণত নিম্নলিখিত কাজগুলো করা হয়:

  • এন্ট্রি তৈরি করার সময় লগ: যখন নতুন ডেটা ইনসার্ট করা হয়, তখন সৃষ্টিকারী ব্যবহারকারী এবং তারিখ ট্র্যাক করা হয়।
  • অপডেট করার সময় লগ: যখন কোনো ডেটা আপডেট করা হয়, তখন ডেটার পূর্ববর্তী মান, পরিবর্তনকারী এবং তারিখ সংরক্ষণ করা হয়।
  • ডিলিট করার সময় লগ: যখন কোনো ডেটা ডিলিট করা হয়, তখন এটি কী কারণে ডিলিট করা হয়েছিল, কে এটি ডিলিট করেছে এবং কখন তা হয়েছে এই তথ্যগুলি রেকর্ড করা হয়।

স্প্রিং জেডিবিসি-তে Auditing কার্যকর করার জন্য কিভাবে করা যায়:

স্প্রিং ফ্রেমওয়ার্কের মাধ্যমে auditing পরিচালনা করার জন্য, আপনি কিছু অতিরিক্ত স্টেপ বা কাস্টম কোড ব্যবহার করতে পারেন যেমন:

  1. Audit Fields: আপনি আপনার ডেটাবেস টেবিলে কিছু অতিরিক্ত ফিল্ড রাখতে পারেন, যেমন:
    • created_by: সৃষ্টিকারী ব্যবহারকারীর নাম।
    • created_at: সৃষ্টির তারিখ এবং সময়।
    • updated_by: শেষ আপডেটকারী ব্যবহারকারীর নাম।
    • updated_at: আপডেটের তারিখ এবং সময়।
  2. ডেটাবেস ট্রিগার বা স্প্রিং ইভেন্ট: আপনি ডেটাবেস ট্রিগার ব্যবহার করতে পারেন, যা ডেটা ইনসার্ট, আপডেট, অথবা ডিলিট হওয়ার সাথে সাথে অটোমেটিকালি একটি নির্দিষ্ট কলাম বা টেবিল আপডেট করে। alternatively, স্প্রিং ইভেন্ট ব্যবহার করে কোনো নির্দিষ্ট কার্যক্রম (যেমন, ডেটা ইনসার্ট বা আপডেট) শুরু হওয়ার সময় auditing তথ্য সংরক্ষণ করা যেতে পারে।
  3. JdbcTemplate এবং DataSource: স্প্রিং JDBC ব্যবহার করে, আপনি JdbcTemplate এবং DataSource এর মাধ্যমে এই পরিবর্তনগুলির জন্য auditing তথ্য স্টোর করতে পারেন। উদাহরণস্বরূপ, JdbcTemplate-এর update মেথড ব্যবহার করে আপনি ডেটা ইনসার্ট বা আপডেট করার সময় audit তথ্য যোগ করতে পারেন।

স্প্রিং জেডিবিসি auditing উদাহরণ:

এখানে একটি উদাহরণ দেওয়া হলো, যেখানে একটি Employee টেবিলের auditing করা হবে:

১. ডেটাবেস টেবিল কনফিগারেশন:

টেবিলের কাঠামো যাতে auditing ফিল্ডগুলি অন্তর্ভুক্ত থাকে:

CREATE TABLE employee (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    salary DECIMAL(10, 2),
    created_by VARCHAR(50),
    created_at TIMESTAMP,
    updated_by VARCHAR(50),
    updated_at TIMESTAMP
);

২. DAO ক্লাস:

এখানে EmployeeDao ক্লাসে auditing তথ্য যোগ করা হবে:

import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Date;

public class EmployeeDao {

    private JdbcTemplate jdbcTemplate;

    // Setter method for JdbcTemplate
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // Insert employee with auditing fields
    public void addEmployee(Employee employee, String createdBy) {
        String sql = "INSERT INTO employee (id, name, salary, created_by, created_at) VALUES (?, ?, ?, ?, ?)";
        jdbcTemplate.update(sql, employee.getId(), employee.getName(), employee.getSalary(), createdBy, new Date());
    }

    // Update employee with auditing fields
    public void updateEmployee(Employee employee, String updatedBy) {
        String sql = "UPDATE employee SET name = ?, salary = ?, updated_by = ?, updated_at = ? WHERE id = ?";
        jdbcTemplate.update(sql, employee.getName(), employee.getSalary(), updatedBy, new Date(), employee.getId());
    }
}

class Employee {
    private int id;
    private String name;
    private double salary;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

৩. মেইন ক্লাস:

এখানে EmployeeDao ব্যবহার করে একটি কর্মী ইনসার্ট এবং আপডেট করা হবে:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloSpringJDBCWithAuditing {
    public static void main(String[] args) {
        // Load the Spring context
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        // Get the EmployeeDao bean
        EmployeeDao employeeDao = (EmployeeDao) context.getBean("employeeDao");

        // Create a new employee
        Employee employee = new Employee();
        employee.setId(1);
        employee.setName("John Doe");
        employee.setSalary(50000);

        // Add employee with auditing
        employeeDao.addEmployee(employee, "admin");

        // Update employee with auditing
        employee.setSalary(55000);
        employeeDao.updateEmployee(employee, "admin");
    }
}

উপসংহার:

Auditing একটি গুরুত্বপূর্ণ প্রক্রিয়া যা ডেটাবেসের সুরক্ষা, ট্র্যাকিং এবং আইনগত মান বজায় রাখতে সাহায্য করে। স্প্রিং জেডিবিসি ব্যবহার করে আপনি সহজেই ডেটাবেসের সৃষ্টির সময়, আপডেট এবং মুছে ফেলার লগ রাখতে পারেন, যা পরে ভবিষ্যতে রেকর্ডগুলো পুনরুদ্ধার করতে, অডিট করতে এবং নিরাপত্তা বজায় রাখতে সহায়ক হয়।

Content added By

Spring Framework এ Auditing কনফিগার করা

67
67

Auditing একটি গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপ্লিকেশন বা ডেটাবেসের মধ্যে কোনো পরিবর্তন বা কার্যকলাপের রেকর্ড রাখে। এটি সাধারণত ডেটার পরিবর্তনগুলি ট্র্যাক করতে এবং ব্যবহারকারীদের ক্রিয়াকলাপের ইতিহাস বজায় রাখতে ব্যবহৃত হয়। স্প্রিং ফ্রেমওয়ার্কে, Auditing কনফিগার করা খুব সহজ এবং এটি Spring Data JPA, Spring JDBC, অথবা সাধারণ Spring Beans এর মাধ্যমে করা যেতে পারে।

স্প্রিং জেডিবিসি (Spring JDBC) এ Auditing কনফিগার করা সাধারণত টেবিলের createdAt, createdBy, updatedAt, এবং updatedBy এর মতো ফিল্ড রাখতে হয়, যা ডেটা তৈরি বা আপডেট হওয়ার সময় স্বয়ংক্রিয়ভাবে পূর্ণ হয়।

Spring Framework এ Auditing কনফিগার করার জন্য কয়েকটি ধাপ:

  1. @CreatedDate এবং @LastModifiedDate এর মাধ্যমে টেবিলের অডিট ফিল্ডে ডেটা অটোমেটিকালি আপডেট করা।
  2. @CreatedBy এবং @LastModifiedBy এর মাধ্যমে ব্যবহারকারী নির্ধারণ করা যারা ডেটা তৈরি বা আপডেট করেছে।

স্প্রিং ফ্রেমওয়ার্কের Auditing ব্যবহারের জন্য সাধারণত Spring Data JPA এর কনফিগারেশন ব্যবহার করা হয়, কিন্তু আমরা Spring JDBC এর জন্যও একটি কাস্টম কনফিগারেশন তৈরি করতে পারি।

১. Spring JDBC এ Auditing কনফিগার করার জন্য স্টেপস:

1.1. প্রথমে ডেটাবেস টেবিলের জন্য অডিট ফিল্ড যোগ করা:

আপনার ডেটাবেস টেবিলগুলিতে কিছু অতিরিক্ত কলাম থাকতে হবে যেমন:

CREATE TABLE employee (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    created_at TIMESTAMP,
    created_by VARCHAR(100),
    updated_at TIMESTAMP,
    updated_by VARCHAR(100)
);

এখানে, created_at, created_by, updated_at, এবং updated_by ফিল্ডগুলো ডেটাবেসের অডিটিং তথ্য ট্র্যাক করবে।

1.2. Audit Information সন্নিবেশিত করতে একটি AuditHelper ক্লাস তৈরি করা:

এই ক্লাসটি অডিটিং ইনফরমেশন সন্নিবেশ করতে সাহায্য করবে (যেমন, createdBy, createdAt, updatedBy, updatedAt):

import java.time.LocalDateTime;

public class AuditHelper {
    public static String getCurrentUser() {
        // আপনি এখানে বর্তমানে লগ ইন করা ব্যবহারকারীর নাম বের করতে পারেন
        return "system";  // এটা কেবল উদাহরণের জন্য, এখানে আপনি ব্যবহারকারীর নাম সেট করতে পারেন
    }

    public static LocalDateTime getCurrentTime() {
        return LocalDateTime.now();
    }
}

1.3. JdbcTemplate ব্যবহার করে অডিটিং তথ্যের সঙ্গে ডেটা আপডেট করা:

EmployeeDao ক্লাসের মধ্যে আপনি অডিট ফিল্ড গুলো সেট করতে পারেন, যেমন:

import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.time.LocalDateTime;

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    // DataSource Inject করা হচ্ছে
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    // Employee ইনসার্ট করার সময় অডিটিং তথ্য যোগ করা
    public void insertEmployee(Employee employee) {
        String sql = "INSERT INTO employee (id, name, age, created_at, created_by, updated_at, updated_by) VALUES (?, ?, ?, ?, ?, ?, ?)";

        jdbcTemplate.update(sql, 
            employee.getId(),
            employee.getName(),
            employee.getAge(),
            AuditHelper.getCurrentTime(), // created_at
            AuditHelper.getCurrentUser(), // created_by
            AuditHelper.getCurrentTime(), // updated_at
            AuditHelper.getCurrentUser()  // updated_by
        );
    }

    // Employee আপডেট করার সময় অডিটিং তথ্য যোগ করা
    public void updateEmployee(Employee employee) {
        String sql = "UPDATE employee SET name = ?, age = ?, updated_at = ?, updated_by = ? WHERE id = ?";

        jdbcTemplate.update(sql, 
            employee.getName(),
            employee.getAge(),
            AuditHelper.getCurrentTime(), // updated_at
            AuditHelper.getCurrentUser(), // updated_by
            employee.getId()
        );
    }
}

এখানে, যখন আপনি insertEmployee বা updateEmployee পদ্ধতি কল করেন, তখন অডিটিং তথ্য যেমন created_at, created_by, updated_at, এবং updated_by অটোমেটিক্যালি ফিল্ডে আপডেট হবে।

1.4. Employee ক্লাসের উদাহরণ:

public class Employee {
    private int id;
    private String name;
    private int age;

    // getters and setters
}

1.5. প্যাকেজে অডিটিং কনফিগারেশন যুক্ত করা:

স্প্রিং কনফিগারেশন ক্লাসে @EnableAspectJAutoProxy ব্যবহার করা যেতে পারে, যাতে অডিটিং প্রসেস অটোমেটিক্যালি সাপোর্ট করা হয়।

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // স্প্রিং কনফিগারেশন
}

1.6. Audit Aspect তৈরি করা:

আপনি যদি Spring AOP ব্যবহার করতে চান, তবে একটি Audit Aspect তৈরি করতে পারেন, যা insert এবং update অপারেশনগুলোর সময় অডিটিং তথ্য স্বয়ংক্রিয়ভাবে যোগ করবে।

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class AuditAspect {

    @Before("execution(* com.example.EmployeeDao.insertEmployee(..))")
    public void addAuditForInsert() {
        // অডিটিং তথ্য প্রক্রিয়াকরণ, যেমন created_at, created_by, updated_at, updated_by
        System.out.println("Audit info added for insert operation");
    }

    @Before("execution(* com.example.EmployeeDao.updateEmployee(..))")
    public void addAuditForUpdate() {
        // অডিটিং তথ্য প্রক্রিয়াকরণ, যেমন updated_at, updated_by
        System.out.println("Audit info added for update operation");
    }
}

২. Spring JDBC তে Auditing এর সুবিধা:

  1. ডেটার পরিবর্তন ট্র্যাকিং: অডিটিং ডেটার পরিবর্তন এবং তার সাথে সম্পর্কিত ব্যবহারকারীর তথ্য ট্র্যাক করতে সহায়তা করে।
  2. নিরাপত্তা এবং কমপ্লায়েন্স: অনেক ক্ষেত্রে, যেমন ব্যাংকিং বা হেলথ কেয়ার অ্যাপ্লিকেশনে, পরিবর্তন ইতিহাস রাখাটা আইনগত বা নিরাপত্তার কারণে বাধ্যতামূলক হয়ে পড়ে।
  3. ডিবাগিং সুবিধা: ডেটার পরিবর্তন ইতিহাস থাকা মানে যে যদি কোনো সমস্যা ঘটে, তবে সহজেই আগে করা পরিবর্তনগুলো চেক করা যায় এবং সমস্যার উৎস খুঁজে পাওয়া যায়।
  4. ব্যবহারকারী নির্ধারণ: createdBy এবং updatedBy ফিল্ডগুলির মাধ্যমে আপনি জানতে পারবেন কোন ব্যবহারকারী কোন ডেটা পরিবর্তন করেছেন।

উপসংহার:

স্প্রিং জেডিবিসি ব্যবহার করে অডিটিং কনফিগার করা সহজ এবং কার্যকর। আপনি যদি টেবিলের জন্য অডিট ফিল্ড (যেমন createdAt, createdBy, updatedAt, updatedBy) ব্যবহার করেন, তবে স্প্রিং কনফিগারেশন এবং স্প্রিং JDBC এর মাধ্যমে অডিটিং স্বয়ংক্রিয়ভাবে পরিচালনা করা যায়। এটি আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং কার্যকরী করে তোলে, বিশেষ করে যখন ডেটার পরিবর্তন বা আপডেট ট্র্যাক করতে হয়।

Content added By

উদাহরণ সহ Auditing পরিচালনা

67
67

স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহার করে Auditing পরিচালনা করা যায়, যা সাধারণত ডেটাবেসে রেকর্ড করার সময় ট্র্যাকিং তথ্য যেমন created_by, created_at, updated_by, updated_at ইত্যাদি সংরক্ষণ করে। এই তথ্যগুলো সাধারণত একটি সিস্টেমে কিভাবে রেকর্ড তৈরি হয়েছে, কিভাবে আপডেট হয়েছে, এবং কে এটি তৈরি বা আপডেট করেছে, তা ট্র্যাক করতে ব্যবহৃত হয়। স্প্রিং জেডিবিসি এর মাধ্যমে auditing সহজে পরিচালনা করা যায়।

Auditing কি?

Auditing হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসে ডেটা তৈরির বা পরিবর্তনের সময়ের সাথে সম্পর্কিত অতিরিক্ত তথ্য (যেমন ব্যবহারকারীর নাম, সময় ইত্যাদি) রেকর্ড করা হয়। এটি সাধারণত সিকিউরিটি, কমপ্লায়েন্স এবং ডেটা ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।

উদাহরণ সহ Auditing পরিচালনা

ধরা যাক, আমরা একটি Employee টেবিল পরিচালনা করছি এবং আমরা চাই যে যখন একটি Employee রেকর্ড তৈরি হয় বা আপডেট হয়, তখন সেই রেকর্ডে created_by, created_at, updated_by, এবং updated_at এর মতো ফিল্ডস সংরক্ষণ করা হোক।

1. ডেটাবেস স্কিমা উদাহরণ:

CREATE TABLE Employee (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    position VARCHAR(50),
    created_by VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_by VARCHAR(50),
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

এখানে:

  • created_by: রেকর্ডটি কে তৈরি করেছে তা ট্র্যাক করবে।
  • created_at: রেকর্ডটি কখন তৈরি হয়েছে তা ট্র্যাক করবে।
  • updated_by: রেকর্ডটি কে আপডেট করেছে তা ট্র্যাক করবে।
  • updated_at: রেকর্ডটি কখন আপডেট হয়েছে তা ট্র্যাক করবে।

2. ডোমেইন ক্লাস (Employee):

import java.sql.Timestamp;

public class Employee {
    private int id;
    private String name;
    private String position;
    private String createdBy;
    private Timestamp createdAt;
    private String updatedBy;
    private Timestamp updatedAt;

    // Getters and Setters
}

3. RowMapper (EmployeeRowMapper):

Employee ক্লাসের জন্য একটি RowMapper তৈরি করা হবে যা SQL কুয়েরি থেকে প্রাপ্ত রেকর্ডগুলোকে Employee অবজেক্টে রূপান্তর করবে।

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

public class EmployeeRowMapper implements RowMapper<Employee> {
    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setName(rs.getString("name"));
        employee.setPosition(rs.getString("position"));
        employee.setCreatedBy(rs.getString("created_by"));
        employee.setCreatedAt(rs.getTimestamp("created_at"));
        employee.setUpdatedBy(rs.getString("updated_by"));
        employee.setUpdatedAt(rs.getTimestamp("updated_at"));
        return employee;
    }
}

4. JdbcTemplate ব্যবহার করে Auditing:

JdbcTemplate ক্লাসের সাহায্যে, যখন একটি Employee রেকর্ড তৈরি বা আপডেট করা হবে, তখন আমরা created_by, updated_by, created_at, এবং updated_at এর মান সঠিকভাবে সন্নিবেশ বা আপডেট করব।

4.1. রেকর্ড তৈরি করার সময় auditing:

import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Map;

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    public EmployeeDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void addEmployee(Employee employee, String createdBy) {
        String sql = "INSERT INTO Employee (name, position, created_by, created_at) " +
                     "VALUES (?, ?, ?, CURRENT_TIMESTAMP)";
        jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), createdBy);
    }
}

এখানে:

  • created_by: রেকর্ড তৈরি করার সময় আমরা বর্তমানে লগ ইন করা ব্যবহারকারীর নাম অথবা যাকে দিয়ে রেকর্ডটি তৈরি হচ্ছে, তার নাম সংরক্ষণ করব।
  • created_at: এটি SQL তে CURRENT_TIMESTAMP দ্বারা স্বয়ংক্রিয়ভাবে নির্ধারিত হবে।

4.2. রেকর্ড আপডেট করার সময় auditing:

public void updateEmployee(Employee employee, String updatedBy) {
    String sql = "UPDATE Employee SET name = ?, position = ?, updated_by = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?";
    jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), updatedBy, employee.getId());
}

এখানে:

  • updated_by: রেকর্ডটি যে ব্যবহারকারী আপডেট করেছেন তার নাম সংরক্ষণ করা হচ্ছে।
  • updated_at: এটি SQL তে CURRENT_TIMESTAMP দ্বারা আপডেট হবে।

5. উদাহরণ সহ ব্যবহার:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class Main {
    public static void main(String[] args) {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/yourdatabase");
        dataSource.setUsername("root");
        dataSource.setPassword("password");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        EmployeeDao employeeDao = new EmployeeDao(jdbcTemplate);

        // Adding a new employee
        Employee newEmployee = new Employee();
        newEmployee.setName("John Doe");
        newEmployee.setPosition("Developer");

        employeeDao.addEmployee(newEmployee, "admin");

        // Updating the employee
        newEmployee.setPosition("Senior Developer");
        employeeDao.updateEmployee(newEmployee, "admin");
    }
}

সারাংশ:

  • Auditing ব্যবস্থাপনা করতে created_by, updated_by, created_at, এবং updated_at ফিল্ডগুলো ডেটাবেস টেবিলের অংশ হিসেবে ব্যবহার করা হয়।
  • JdbcTemplate এবং SQL কুয়েরি এর মাধ্যমে auditing ডেটা সন্নিবেশ বা আপডেট করা হয়।
  • CURRENT_TIMESTAMP এবং CURRENT_USER() ব্যবহার করে সময় এবং ব্যবহারকারীর তথ্য স্বয়ংক্রিয়ভাবে নির্ধারণ করা হয়।
Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion